home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1996 #15 / Monster Media Number 15 (Monster Media)(July 1996).ISO / bbs_util / bsrc_260.zip / SRC.ZIP / BT.C < prev    next >
Text File  |  1996-04-07  |  19KB  |  381 lines

  1. /*--------------------------------------------------------------------------*/
  2. /*                                                                          */
  3. /*                                                                          */
  4. /*      ------------         Bit-Bucket Software, Co.                       */
  5. /*      \ 10001101 /         Writers and Distributors of                    */
  6. /*       \ 011110 /          Freely Available<tm> Software.                 */
  7. /*        \ 1011 /                                                          */
  8. /*         ------                                                           */
  9. /*                                                                          */
  10. /*              (C) Copyright 1987-96, Bit Bucket Software Co.              */
  11. /*                                                                          */
  12. /*            This module was originally written by Bob Hartman             */
  13. /*                                                                          */
  14. /*            BinkleyTerm "Main" Module: Terminal Emulation and             */
  15. /*                        File Transfer dispatching                         */
  16. /*                                                                          */
  17. /*                                                                          */
  18. /*                       BinkleyTerm Licensing Terms                        */
  19. /*                                                                          */
  20. /*                                                                          */
  21. /*              (C) Copyright 1987-96 Bit Bucket Software Co.               */
  22. /*    ALL RIGHTS RESERVED. COMMERCIAL DISTRIBUTION AND/OR USE PROHIBITED    */
  23. /*          WITHOUT WRITTEN PERMISSION FROM BIT BUCKET SOFTWARE CO.         */
  24. /*                                                                          */
  25. /* Non-Commercial distribution and/or use is permitted under the following  */
  26. /* terms:                                                                   */
  27. /*                                                                          */
  28. /*                                                                          */
  29. /* 1. You may copy and distribute verbatim copies of BinkleyTerm source,    */
  30. /* documentation, and executable code as you receive it, in any medium,     */
  31. /* provided that you conspicuously and appropriately publish on each copy a */
  32. /* valid copyright notice "(C) Copyright 1987-96, Bit Bucket Software Co."; */
  33. /* keep intact the notices on all files that refer to this License          */
  34. /* Agreement and to the absence of any warranty;  PROVIDE UNMODIFIED COPIES */
  35. /* OF THE DOCUMENTATION AS PROVIDED WITH THE PROGRAM; and give any other    */
  36. /* recipients of the BinkleyTerm program a copy of this License Agreement   */
  37. /* along with the program.  You may charge a distribution fee for the       */
  38. /* physical act of transferring a copy, but no more than is necessary to    */
  39. /* recover your actual costs incurred in the transfer. Under no             */
  40. /* circumstances is BinkleyTerm to be distributed in such a way as to be    */
  41. /* construed as "value added" in a sales transaction, such as, but not      */
  42. /* limited to, software bundled with a modem or CD-ROM software             */
  43. /* collections.                                                             */
  44. /*                                                                          */
  45. /* 2. You may modify your copy or copies of BinkleyTerm or any portion of   */
  46. /* it, and copy and distribute such modifications under the terms of        */
  47. /* Paragraph 1 above, provided that you also do the following:              */
  48. /*                                                                          */
  49. /*     a) cause the modified files to carry prominent notices stating       */
  50. /*     that you changed the files and the date of any change;               */
  51. /*                                                                          */
  52. /*     b) cause the executable code of such modified version to clearly     */
  53. /*     identify itself as such in the course of its normal operation;       */
  54. /*                                                                          */
  55. /*     c) if the modified version is not a "port", but operates in the      */
  56. /*     same hardware and/or software environment as the original            */
  57. /*     distribution, make the original version equally available,           */
  58. /*     clearly identifying same as the original, unmodified version;        */
  59. /*                                                                          */
  60. /*     d) cause the whole of any work that you distribute or publish,       */
  61. /*     that in whole or in part contains or is a derivative of              */
  62. /*     BinkleyTerm or any part thereof, to be licensed at no charge to      */
  63. /*     all third parties on terms identical to those contained in this      */
  64. /*     License Agreement (except that you may choose to grant more          */
  65. /*     extensive warranty protection to some or all third parties, at       */
  66. /*     your option); and                                                    */
  67. /*                                                                          */
  68. /*     e) send the complete source code modifications to Bit Bucket         */
  69. /*     Software Co. at one of the addresses listed below,  for the          */
  70. /*     purpose of evaluation for inclusion in future releases of            */
  71. /*     BinkleyTerm.  Should your source code be included in BinkleyTerm,    */
  72. /*     Bit Bucket Software Co. retains all rights for redistribution of     */
  73. /*     the code as part of BinkleyTerm and all derivative works, with       */
  74. /*     appropriate credit given to the author of the modification.          */
  75. /*                                                                          */
  76. /*     f) You may charge a distribution fee for the physical act of         */
  77. /*     transferring a copy, but no more than is necessary to recover        */
  78. /*     your actual costs incurred in the transfer, and you may at your      */
  79. /*     option offer warranty protection in exchange for a fee.              */
  80. /*                                                                          */
  81. /* 3. Mere aggregation of another unrelated program with this program and   */
  82. /* documentation (or derivative works) on a volume of a storage or          */
  83. /* distribution medium does not bring the other program under the scope of  */
  84. /* these terms.                                                             */
  85. /*                                                                          */
  86. /* 4. You may copy and distribute BinkleyTerm and its associated            */
  87. /* documentation (or a portion or derivative of it, under Paragraph 2) in   */
  88. /* object code or executable form under the terms of Paragraphs 1 and 2     */
  89. /* above provided that you also do one of the following:                    */
  90. /*                                                                          */
  91. /*     a) accompany it with the complete corresponding machine-readable     */
  92. /*     source code, which must be distributed under the terms of            */
  93. /*     Paragraphs 1 and 2 above; or,                                        */
  94. /*                                                                          */
  95. /*     b) accompany it with a written offer, valid for at least three       */
  96. /*     years, to give any third party free (except for a nominal            */
  97. /*     shipping charge) a complete machine-readable copy of the             */
  98. /*     corresponding source code, to be distributed under the terms of      */
  99. /*     Paragraphs 1 and 2 above; or,                                        */
  100. /*                                                                          */
  101. /*     c) accompany it with the information you received as to where        */
  102. /*     the corresponding source code may be obtained.  (This                */
  103. /*     alternative is allowed only for noncommercial distribution and       */
  104. /*     only if you received the program in object code or executable        */
  105. /*     form alone.)                                                         */
  106. /*                                                                          */
  107. /* For an executable file, complete source code means all the source code   */
  108. /* for all modules it contains; but, as a special exception, it need not    */
  109. /* include source code for modules which are standard libraries that        */
  110. /* accompany the operating system on which the executable file runs.        */
  111. /*                                                                          */
  112. /* 5. You may not copy, sublicense, distribute or transfer BinkleyTerm and  */
  113. /* its associated documentation  except as expressly provided under this    */
  114. /* License Agreement.  Any attempt otherwise to copy, sublicense,           */
  115. /* distribute or transfer BinkleyTerm is void and your rights to use the    */
  116. /* program under this License agreement shall be automatically terminated.  */
  117. /* However, parties who have received computer software programs from you   */
  118. /* with this License Agreement will not have their licenses terminated so   */
  119. /* long as such parties remain in full compliance, and notify Bit Bucket    */
  120. /* Software Co. of their intention to comply with this Agreement.           */
  121. /*                                                                          */
  122. /* 6. If you wish to incorporate parts of BinkleyTerm into other free       */
  123. /* programs whose distribution conditions are different, please contact     */
  124. /* Bit Bucket Software Co. at one of the addresses listed below.  We have   */
  125. /* not yet worked out a simple rule that can be stated here, but we will    */
  126. /* usually permit this.  We will be guided by the two goals of preserving   */
  127. /* the free status of all derivatives of our free software (as it pertains  */
  128. /* to Non-Commercial use as provided by this Agreement) and of promoting    */
  129. /* the sharing and reuse of software.                                       */
  130. /*                                                                          */
  131. /* 7. For the purposes of this document, "COMMERCIAL USE" is defined as     */
  132. /* operation of the software on four or more computers or data lines owned  */
  133. /* by the same for-profit organization. Any organization may operate this   */
  134. /* software under the terms of this Non-Commercial Agreement if operation   */
  135. /* is limited to three or less computers or data lines.                     */
  136. /*                                                                          */
  137. /*                                                                          */
  138. /*                                NO WARRANTY                               */
  139. /*                                                                          */
  140. /* BECAUSE BINKLEYTERM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY NO */
  141. /* WARRANTY.  EXCEPT WHEN OTHERWISE STATED IN WRITING, BIT BUCKET SOFTWARE  */
  142. /* CO. AND/OR OTHER PARTIES PROVIDE BINKLEYTERM "AS IS" WITHOUT WARRANTY OF */
  143. /* ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,    */
  144. /* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR   */
  145. /* PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF           */
  146. /* BINKLEYTERM, AND THE ACCURACY OF ITS ASSOCIATED DOCUMENTATION, IS WITH   */
  147. /* YOU.  SHOULD BINKLEYTERM OR ITS ASSOCIATED DOCUMENTATION PROVE           */
  148. /* DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR     */
  149. /* CORRECTION.                                                              */
  150. /*                                                                          */
  151. /* IN NO EVENT WILL BIT BUCKET SOFTWARE CO. BE RESPONSIBLE IN ANY WAY FOR   */
  152. /* THE BEHAVIOR OF MODIFIED VERSIONS OF BINKLEYTERM. IN NO EVENT WILL       */
  153. /* BIT BUCKET SOFTWARE CO. AND/OR ANY OTHER PARTY WHO MAY MODIFY AND        */
  154. /* REDISTRIBUTE BINKLEYTERM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR        */
  155. /* DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR OTHER SPECIAL,      */
  156. /* INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY  */
  157. /* TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED */
  158. /* INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR A FAILURE OF THE      */
  159. /* PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) BINKLEYTERM, EVEN IF YOU     */
  160. /* HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM   */
  161. /* BY ANY OTHER PARTY.                                                      */
  162. /*                                                                          */
  163. /*                                                                          */
  164. /* You can contact Bit Bucket Software Co. at any one of the following      */
  165. /* addresses:                                                               */
  166. /*                                                                          */
  167. /* Bit Bucket Software Co.        FidoNet  1:104/501, 1:343/491             */
  168. /* P.O. Box 460398                AlterNet 7:42/1491                        */
  169. /* Aurora, CO 80046               Internet f491.n343.z1.fidonet.org         */
  170. /*                                                                          */
  171. /*                                                                          */
  172. /* Please feel free to contact us at any time to share your comments about  */
  173. /* our software and/or licensing policies.                                  */
  174. /*                                                                          */
  175. /* Our thanks to Richard Stallman and the Free Software Foundation, Inc.,   */
  176. /* for most of the wording of this License.                                 */
  177. /*                                                                          */
  178. /*--------------------------------------------------------------------------*/
  179.  
  180. /* Include this file before any other includes or defines! */
  181.  
  182. #include "includes.h"
  183.  
  184. #ifndef NO_SIGNALS
  185. SIGTYPE handler (SIGARGS);
  186.  
  187. #endif
  188.  
  189. MAINTYPE
  190. main (int argc, char *argv[])
  191. {
  192.     int done;
  193.     char *envptr;
  194.     ADDR baddr;
  195.     long init_timer;
  196.     char *poll_addr = NULL;
  197.  
  198.     (void) load_language ();
  199.  
  200. #ifndef NO_SIGNALS
  201.     if (signal (SIGINT, handler) == SIG_ERR)
  202.     {
  203.         (void) fprintf (stderr, MSG_TXT (M_NO_SIGINT));
  204.     }
  205. #ifdef SIGBREAK
  206.     (void) signal (SIGBREAK, SIG_IGN);
  207. #endif
  208. #endif
  209.  
  210.     (void) printf (ANNOUNCE);
  211.     (void) printf ("\n(C) Copyright 1987-96, Bit Bucket Software, Co. ALL RIGHTS RESERVED.\n\n");
  212.     (void) printf (MSG_TXT (M_SYSTEM_INITIALIZING));
  213.     init_timer = timerset (200);
  214.     b_initvars ();
  215.  
  216.     while (--argc)
  217.     {
  218.         ++argv;
  219.  
  220.         switch (parse (argv[0], DOS_commands))
  221.         {
  222.         case 1:                /* Noforce    */
  223.             noforce = 1;
  224.             break;
  225.  
  226.         case 2:                /* Mail       */
  227.             ++mail_only;
  228.             break;
  229.  
  230.         case 3:                /* Share      */
  231.             ++share;
  232.             break;
  233.  
  234.         case 4:                /* Dynam      */
  235.             ++redo_dynam;
  236.             break;
  237.  
  238.         case 5:                /* Unattended */
  239.             un_attended = 1;
  240.             command_line_un = 1;
  241.             break;
  242.  
  243.         case 6:                /* Config     */
  244.             config_name = argv[1];
  245.             --argc;
  246.             ++argv;
  247.             break;
  248.  
  249.         case 7:                /* Poll       */
  250.             poll_addr = argv[1];
  251.             --argc;
  252.             ++argv;
  253.             break;
  254.  
  255.         default:                /* Not there  */
  256.             (void) printf (MSG_TXT (M_UNRECOGNIZED_OPTION), argv[0]);
  257.             exit (1);
  258.         }
  259.     }
  260.  
  261.     envptr = getenv (PRDCT_PRFX);    /* get path from environment */
  262.     if ((envptr != NULL)        /* If there was one, and     */
  263.         && (!dexists (config_name)))    /* No BINKLEY.CFG locally,   */
  264.     {
  265.         BINKpath = calloc (1, (strlen (envptr) + 2));    /* make room for new */
  266.         (void) strcpy (BINKpath, envptr);    /* use BINKLEY as our path   */
  267.         (void) add_backslash (BINKpath);
  268.     }
  269.     else
  270.         BINKpath = "";
  271.  
  272.     (void) memset (&hist, 0x00, sizeof(HISTORY)); 
  273.  
  274.     read_sched ();
  275.     parse_config (PRDCT_PRFX ".Evt");
  276.     parse_config (config_name);
  277.     b_defaultvars ();
  278.  
  279.     /* We have everything we need to handle addresses now.
  280.     * Parse the 'poll' address if there was one.
  281.     */
  282.  
  283.     if (poll_addr != NULL && find_address (poll_addr, &baddr))
  284.     {
  285.         doing_poll = 1;
  286.     }
  287.  
  288.     (void) LoadScanList (0, 0);    /* Get default scan list */
  289.  
  290.     /* We expect this to fail right away, but in order to keep the copyright
  291.       notice displayed long enough, we check anyway */
  292.  
  293.     while (!timeup (init_timer))
  294.         time_release ();
  295.  
  296.     done = 0;
  297.  
  298.     if (fullscreen)
  299.         b_sbinit ();
  300.  
  301.     if (mail_only)
  302.     {
  303.         doing_poll = 1;
  304.         baddr = boss_addr;
  305.     }
  306.  
  307.     start_hist = hist;
  308.  
  309.     if (doing_poll)
  310.     {
  311.         if (baddr.Zone == 0)
  312.             baddr.Zone = alias[0].Zone;
  313.         un_attended = 1;
  314.         opening_banner ();
  315.         mailer_banner ();
  316.         if (fullscreen)
  317.         {
  318.             (void) sprintf (junk, "%s", Full_Addr_Str (&baddr));
  319.             junk[28] = '\0';
  320.  
  321.             sb_fill (holdwin, ' ', colors.hold);
  322.             sb_move (holdwin, 2, 12);
  323.             sb_puts (holdwin, MSG_TXT (M_POLLING_COLON));
  324.             sb_move (holdwin, 4, (short) (16 - strlen (junk) / 2));
  325.             sb_puts (holdwin, junk);
  326.             sb_show ();
  327.         }
  328.         set_prior (4);            /* Always High */
  329.         if (!CARRIER)
  330.             mdm_hangup ();
  331.         (void) do_mail (&baddr, 1);
  332.         set_prior (2);            /* Regular */
  333.         done = 1;
  334.     }
  335.     else if (!un_attended)
  336.     {
  337.         opening_banner ();
  338.     }
  339.  
  340.     while (!done)
  341.     {
  342.         if (un_attended)
  343.         {
  344.             done = unattended ();
  345.             un_attended = 0;
  346.         }
  347.         else
  348.         {
  349.             done = b_term ();
  350.             un_attended = done ? 0 : 1;
  351.         }
  352.     }
  353.  
  354.     b_exitproc ();
  355.  
  356.     exit (1);
  357. }
  358.  
  359. #ifndef NO_SIGNALS
  360. SIGTYPE
  361. handler (SIGARGS)                /* Function called at system interrupt */
  362. {
  363. #ifdef SIGNAL_ARGUMENT
  364.     happy_compiler = (int) sigarg;    /* For the compiler */
  365. #endif
  366.     (void) signal (SIGINT, SIG_IGN);    /* Disallow CTRL + C during handler    */
  367.  
  368.     ctrlc_ctr++;
  369.  
  370.     (void) signal (SIGINT, handler);    /* This is necessary so that the
  371.                                        ** next CTRL+C interrupt will call
  372.                                        ** "handler", since the DOS 3.x
  373.                                        ** operating system resets the
  374.                                        ** interrupt handler to the
  375.                                        ** system default after the
  376.                                        ** user-defined handler is called
  377.                                        */
  378. }
  379.  
  380. #endif
  381.